package com.software.task.mapper;

import com.software.task.pojo.Task;
import org.apache.ibatis.annotations.*;


import java.time.LocalDateTime;
import java.util.List;

/**
 * @author lj20050120
 */
@Mapper
public interface TaskMapper {

    /**
     * 根据任务ID查找任务
     * @param taskid 任务ID
     * @return 找到的任务对象，如果未找到则返回null
     */
    @Select("SELECT task_id,task_name,task_description,due_date,create_dat,update_dat,teacher_id FROM task WHERE task_id = #{taskid}")
    Task findTaskById(Integer taskid);

    /**
     * 根据任务名称查找任务列表
     * @param name 任务名称（支持模糊查询）
     * @return 符合条件的任务列表
     */
    @Select("SELECT task_id,task_name,task_description,due_date,create_dat,update_dat,teacher_id FROM task WHERE task_name LIKE concat('%', #{name}, '%')")
    List<Task> findTasksByName(String name);

    /**
     * 根据教师ID查找任务列表
     * @param teacherId 教师ID
     * @return 该教师创建的任务列表
     */
    @Select("SELECT task_id,task_name,task_description,due_date,create_dat,update_dat,teacher_id FROM task WHERE teacher_id = #{teacherId}")
    List<Task> findTasksByTeacherId(Integer teacherId);

    /**
     * 创建新任务
     * @param task 任务对象，包含任务名称、描述、截止日期、创建日期、更新日期和教师ID
     */
    @Insert("INSERT INTO task(task_name,task_description,due_date,create_dat,update_dat,teacher_id) VALUES(#{taskName}, #{taskDescription}, #{dueDate}, #{createDat}, #{updateDat}, #{teacherId})")
    void createTask(Task task);

    /**
     * 根据任务ID删除任务
     * @param id 任务ID
     */
    @Delete("DELETE FROM task WHERE task_id = #{id}")
    void deleteTaskById(@Param("id") Integer id);

    /**
     * 根据任务ID更新任务信息
     * @param taskName 任务名称
     * @param taskDescription 任务描述
     * @param teacherId 教师ID
     * @param dueDate 任务截止日期
     * @param updatedAt 任务更新日期
     * @param id 任务ID
     */
    @Update("UPDATE task SET task_name = #{taskName}, task_description = #{taskDescription}, teacher_id = #{teacherId}, due_date = #{dueDate}, update_dat = #{updatedAt} WHERE task_id = #{id}")
    void updateTaskById(@Param("taskName") String taskName, @Param("taskDescription") String taskDescription, @Param("teacherId") Integer teacherId, @Param("dueDate") LocalDateTime dueDate, @Param("updatedAt") LocalDateTime updatedAt, @Param("id") Integer id);

    /**
     * 查找所有任务
     * @return 所有任务的列表
     */
    @Select("SELECT task_id,task_name,task_description,due_date,create_dat,update_dat,teacher_id FROM task")
    List<Task> findAllTasks();

    /**
     * 根据任务ID列表查找任务列表
     * @param taskIds 任务ID列表
     * @return 符合条件的任务列表
     */
    @Select("<script> " +
            "SELECT task_id,task_name,task_description,due_date,create_dat,update_dat,teacher_id FROM task " +
            "WHERE task_id IN " +
            "<foreach item='id' collection='list' open='(' separator=',' close=')'>#{id}</foreach> " +
            "</script>")
    List<Task> getTasksByTaskIds(@Param("list") List<Integer> taskIds);
}
